package com.zzx.graduation.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

/**
 *
 */
@Getter
@Setter
@ToString
//@Proxy(lazy = true)//,默认开启懒加载
@Entity//jpa实体类和数据表映射
//@Table(name="tb_user")//指定和哪个表对应，省略就采用默认user
//@JsonIgnoreProperties(value = {"fans","visitors"})//需要一一列出需要忽略转json的属性，
// 还是在属性上面添加好一点
public class User  {
    @Id//主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)//自增主键
    private Integer id;
    @Column(name="username")
    private String username;

    @Column(name="password")
    private String password;

    @Column(name="userType")
    private  Integer userType;// 0,普通用户  1，管理员

    @Column(name="staff_name")
    private String staffName;
    @Column(name="staff_sex")
    private String staffSex;

    //记得在ER图上加上
    @Column(name="staff_age")
    private Integer staffAge;

    @Column(name="staff_phone")
    private String staffPhone;

    @Column(name="staff_address")
    private String staffAddress;//住址

    @Column(name="staff_id_num")
    private String staffIdNum;//身份证

    @JsonIgnore
    @JsonIgnoreProperties("ownUser")
    @OneToMany(mappedBy = "ownUser",cascade = {CascadeType.PERSIST,CascadeType.REMOVE})//发送消息列表
    private Set<News> news= new HashSet<>();

    @JsonIgnore
    @JsonIgnoreProperties("userSet")
    @ManyToMany
    @JoinTable(name = "user_group",joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "group_id"))
    private Set<GroupChat> groupSet = new HashSet<>();//群聊
    //1、关系维护端，负责多对多关系的绑定和解除
    //2、@JoinTable注解的name属性指定关联表的名字，joinColumns指定外键的名字，关联到关系维护端(User)
    //3、inverseJoinColumns指定外键的名字，要关联的关系被维护端(Authority)
    //4、其实可以不使用@JoinTable注解，默认生成的关联表名称为主表表名+下划线+从表表名，
    //即表名为user_authority
    //关联到主表的外键名：主表名+下划线+主表中的主键列名,即user_id
    //关联到从表的外键名：主表中用于关联的属性名+下划线+从表的主键列名,即authority_id
    //主表就是关系维护端对应的表，从表就是关系被维护端对应的表


}
